package estructuras.common;

import java.util.StringTokenizer;

public class Fecha implements Comparable<Fecha>{
	int dia, diaSemana;
	int hora;
	public Fecha(int dia, int hora){
		this.dia = dia;
		this.diaSemana = dia % 7;
		this.hora = hora;
	}
	public Fecha(int i) {
		this(i / 24, i % 24);
	}
	public int toHoras() {
		return dia * 24 + hora;
	}
	public int getDia(){
		return dia;
	}
	public int getHora(){
		return hora;
	}
	public static Fecha nextHora(Fecha fecha){
		int ndia = fecha.dia, nhora = fecha.hora;
		nhora++;
		if(nhora == 24){
			nhora = 0;
			ndia++;
		}
		return new Fecha(ndia, nhora);
	}
	public static Fecha nextDias(Fecha fecha, int diasAdicionales){
		return new Fecha(fecha.getDia() + diasAdicionales, fecha.getHora());
	}
	@Override
	public int compareTo(Fecha otro){
		return toHoras() - otro.toHoras();
	}
	@Override
	public boolean equals(Object otro){
		return this.compareTo((Fecha)otro) == 0;
	}
	public static Fecha getPrimeraFecha(Fecha fechaInicial, int diaDeSemana, int horaDeVuelo) {
		int dia = fechaInicial.dia / 7 * 7 + diaDeSemana;
		if(dia == fechaInicial.dia && fechaInicial.hora > horaDeVuelo)
			dia += 7;
		return new Fecha(dia, horaDeVuelo);
	}
	public void addHoras(int horas) {
		dia += horas / 24;
		hora += horas % 24;
		if(hora >= 24){
			hora -= 24;
			dia++;
		}
	}
	public int getDiaSemana() {
		return diaSemana;
	}
	public static Fecha suma(Fecha a, Fecha b) {
		int nhoras = a.hora + b.hora;
		int ndias = a.dia + b.dia;
		if(nhoras >= 24){
			ndias++;
			nhoras -= 24;
		}
		return new Fecha(ndias, nhoras);
	}
	public static Fecha resta(Fecha a, Fecha b) {
		int nhoras = a.toHoras() - b.toHoras();
		return new Fecha(nhoras);
	}
	@Override
	public String toString(){
		return dia + " " + hora;
	}
	public static Fecha parseFecha(String nextLine) {
		StringTokenizer tokenizer = new StringTokenizer(nextLine);
		int dia = Integer.parseInt(tokenizer.nextToken());
		int hora = Integer.parseInt(tokenizer.nextToken());
		return new Fecha(dia, hora);
	}
}
